#ifndef TPORO_H_
#define TPORO_H_
#include <iostream>
using namespace std;
/** \file tporo.h
* \brief Clase TPoro
* Definicion de la clase TPoro
*/

/** \class TPoro
* \brief Clase TPoro
* Clase completa para construir TPoro
*/
class TPoro {
	public:
		/** \brief Constructor por defecto
		* Construye un objeto TPoro con valores inicializados
		*/
		TPoro();
		
		/** \brief Constructor a partir de una posición y un volumen
		* Construye un objeto TPoro recibiendo por parametros las coordenadas y el volumen
                * \param px Coordenada X
                * \param py Coordenada Y
                * \param pvol Volumen
		*/
		TPoro(int, int, double);
		
		/** \brief Constructor a partir de una posición, un volumen y un color
		*	Construye un objeto TPoro recibiendo los mismos parametros que antes mas el de color
                 * \param px Coordenada X
                 * \param py Coordenada Y
                 * \param pvol Volumen
                 * \param pcolor Color
		*/
		TPoro(int, int, double, char*);
		
		/** \brief Constructor de copia
		* Crea una copia del objeto que recibe
                 * \param poro Poro del que copiar
		*/
		TPoro(const TPoro &);
		
		/** \brief Destructor
		* Destruye el objeto liberando memoria de las variables
		*/
		~TPoro();
		
		/** \brief Sobrecarga del operador asignación
		* Copia los valores de un objeto a otro
                 * \param poro Poro del que copiar
                 * \return Objeto copiado
		*/
		TPoro & operator = (const TPoro &);
		
		/** \brief Sobrecarga del operador igualdad
		* Compara los dos objetos y devuelve un bool
                 * \param poro Poro a comparar
                 * \return Devuelve si es verdadero o falso
		*/
		bool operator==(const TPoro &) const;
		
		/** \brief Sobrecarga del operador desigualdad
		* Compara los dos objetos y devuelve un bool
                 * \param poro Poro a comparar
                 * \return Devuelve si es verdadero o falso
		*/
		bool operator!=(const TPoro &) const;
		
		/** \brief Modifica la posición
		* Modifica el valor de posicion del objeto que recibe
                 * \param px Coordenada X
                 * \param py Coordenada Y
                 * \return No devuelve nada
		*/
		void Posicion(int, int);
		
		/** \brief Modifica el volumen
		* Modifica el valor de volumen del objeto que recibe
                 * \param pvolumen Volumen
                 * \return No devuelve nada
		*/
		void Volumen(double);
		
		/** \brief Modifica el color
		* Modifica el color del objeto que recibe
                 * \param pcolor Color
                 * \return No devuelve nada
		*/
		void Color(char *);
		
		/** \brief Devuelve la coordenada x de la posición
		* Devuelve el valor de la x
                 * \return Devuelve X
		*/
		int PosicionX() const;
		
		/** \brief Devuelve la coordenada y de la posición
		* Devuelve el valor de la y
                 * \return Devuelve Y
		*/
		int PosicionY() const;
		
		/** \brief Devuelve el volumen
		* Devuelve el valor del volumen
                 * \return Devuelve volumen
		*/
		double Volumen() const;
		
		/** \brief Devuelve el color
		* Devuelve el array que representa el color
                 * \return Devuelve color
		*/
		char * Color() const;
		
		/** \brief Devuelve cierto si el poro está vacío
		* Verifica que todos los parametros esten inicializados a default y devuelve un bool
                 * \return Devuelve verdadero o falso
		*/
		bool EsVacio() const;
		
		/** \brief Sobrecarga del operador SALIDA
		* Imprime el contenido del objeto
                 * \param os Tipo ostream&
                 * \param poro Objeto TPoro
                 * \return ostream&
		*/
		friend ostream & operator<<(ostream &, const TPoro &);
	private:
		/** \brief Entero x.
		* 	Variable que representa las coordenada X.
		*/ 
		int x;
                
                /** \brief Entero y.
		* 	Variable que representa la coordenada Y.
		*/
                int y;
		
		/** \brief Double volumen.
		*	Variable que representa el volumen
		*/
		double volumen;

		/** \brief Array de chars.
		*	Variable de array de chars que representa el color
		*/
		char* color;
                
		/** \brief Operacion auxiliar.
		* Cambia el texto de color de mayus a minus
                 * \param cadena Texto
                 * \return Devuelve la cadena alterada
		*/
		char* toLower(char*);
};
#endif /*TPORO_H_*/
